/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package dados;

/**
 *
 * @author asouza
 */

import negocio.*;
import java.sql.*;
import java.util.LinkedList;
import java.util.List;

public class CadastroMemDAO implements Cadastro{
    
    public CadastroMemDAO() throws DAOException
    {
       try {
             Class.forName("org.apache.derby.jdbc.EmbeddedDriver");
        } catch (ClassNotFoundException ex) {
            throw new DAOException("JdbcOdbDriver not found!!");
        }
    }
    
    public boolean adicionar(Pessoa p){ 
       try {
            Connection con = getConnection();
            Statement sta = con.createStatement();
            String sql = "INSERT INTO PESSOA (NOME, SEXO) VALUES ("
                    + "'" + p.getNome() + "',"
                    + "'" + p.getSexo() + "')";
                  
            //System.out.println(sql);
            sta.executeUpdate(sql);
            sta.close();
            con.close();
            return true;
        } catch (SQLException ex) {
            
            return false;
        }
    }
    
    
    public Pessoa getPessoaPorNome(String n) throws DAOException
    { 
        Pessoa p = null; 
        String stmt= "";
        try {
            Connection con = getConnection();
            Statement sta = con.createStatement();
            stmt = "SELECT NOME, SEXO FROM PESSOA WHERE UCASE(NOME) = '" + n.toUpperCase() + "'";
            
            System.out.println(stmt);
            
            ResultSet res = sta.executeQuery(stmt);
            
            if (res.next()) {
                     p = new Pessoa(
                        res.getString("NOME"),
                        (res.getString("SEXO") == "M"));
            }
            res.close();
            sta.close();
            con.close();
        } catch (Exception ex) {
            throw new DAOException(ex.getMessage());
        }
        
        return p;
    }
    
    public List<Pessoa> getHomens(){ 
        
        List<Pessoa> lst = new LinkedList<Pessoa>();
        String SQLstr = "";

        SQLstr = "SELECT NOME, SEXO FROM PESSOA WHERE SEXO='M'";

        try {
            Connection con = getConnection();
            Statement sta = con.createStatement();

            ResultSet res = sta.executeQuery(SQLstr);
            while (res.next())
                lst.add(new Pessoa(res.getString("NOME"), true));
            
            res.close();
            sta.close();
            con.close();
        } catch (Exception ex) {
            System.out.println("Erro em ContribuinteDAOJavaDB:loadData() : " + ex.getMessage());
        }
        
        return lst;
    }
    
    public List<Pessoa> getMulheres(){ 
        
        List<Pessoa> lst = new LinkedList<Pessoa>();
        String SQLstr = "";

        SQLstr = "SELECT NOME, SEXO FROM PESSOA WHERE SEXO='F'";

        try {
            Connection con = getConnection();
            Statement sta = con.createStatement();

            ResultSet res = sta.executeQuery(SQLstr);
            while (res.next())
                lst.add(new Pessoa(res.getString("NOME"),false));
            
            res.close();
            sta.close();
            con.close();
        } catch (Exception ex) {
            System.out.println("Erro em ContribuinteDAOJavaDB:loadData() : " + ex.getMessage());
        }
        return lst;
    }

    
    
    public List<Pessoa> getTodos(){ 
        
        List<Pessoa> lst = new LinkedList<Pessoa>();
        String SQLstr = "";

        SQLstr = "SELECT NOME, SEXO FROM PESSOA";

        try {
            Connection con = getConnection();
            Statement sta = con.createStatement();

            ResultSet res = sta.executeQuery(SQLstr);
            while (res.next()) {
                lst.add(new Pessoa(
                             res.getString("NOME"),
                            (res.getString("SEXO") == "M")));
            }
            res.close();
            sta.close();
            con.close();
        } catch (Exception ex) {
            System.out.println("Erro em ContribuinteDAOJavaDB:loadData() : " + ex.getMessage());
        }
        return lst;
    }
    
    
    public static void createDB() throws DAOException {
        try {
            Connection con = DriverManager.getConnection("jdbc:derby:derbyDB;create=true");
            Statement sta = con.createStatement();
            String sql = "CREATE TABLE PESSOA ("
                    + "NOME VARCHAR(100) NOT NULL,"
                    + "SEXO VARCHAR(1) PRIMARY KEY"
                    + ")";
            sta.executeUpdate(sql);
            sta.close();
            con.close();
        } catch (SQLException ex) {
            throw new DAOException(ex.getMessage());
        }
    }

    private static Connection getConnection() throws SQLException {
        //derbyDB sera o nome do diretorio criado localmente
        return DriverManager.getConnection("jdbc:derby:derbyDB");
    }
}
